#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e5+5;
struct mat
{
    int xl,xr,yl,yr;
};
int n,q,L[maxn],R[maxn];
mat a[maxn];
bool hmat(mat A,mat B)
{
    return A.xl>=B.xl && A.xr<=B.xr && A.yl>=B.yl && A.yr<=B.yr;
}
pair<int, int> pr[maxn];
struct node
{
    int l,r,k;
};
vector<node> vec[maxn];
int d[maxn],cnt;
int x[maxn],y[maxn],lenx,leny,w[maxn],sum[maxn<<2],tag[maxn<<2];
inline void pushup(int id,int l,int r)
{
    if(tag[id]>0) sum[id]=w[r]-w[l-1];
    else sum[id]=sum[id<<1]+sum[id<<1|1];
}
void update(int id,int l,int r,int yl,int yr,int k)
{
    if(yl>yr) return;
    if(l>=yl && r<=yr)
    {
        tag[id]+=k;
        pushup(id,l,r);
        return;
    }
    int mid=(l+r)>>1;
    if(yl<=mid) update(id<<1,l,mid,yl,yr,k);
    if(yr>mid) update(id<<1|1,mid+1,r,yl,yr,k);
    pushup(id,l,r);
}
inline ll get_ans()
{
    ll ret=0;
    lenx=leny=0;
    for(int i=1;i<=cnt;i++)
    {
        x[++lenx]=a[d[i]].xl,x[++lenx]=a[d[i]].xr;
        y[++leny]=a[d[i]].yl,y[++leny]=a[d[i]].yr;
    }
    sort(x+1,x+1+lenx),sort(y+1,y+1+leny);
    lenx=unique(x+1,x+1+lenx)-x-1,leny=unique(y+1,y+1+leny)-y-1;
    int xl,xr,yl,yr;
    for(int i=1;i<=cnt;i++)
    {
        xl=lower_bound(x+1,x+1+lenx,a[d[i]].xl)-x;
        yl=lower_bound(y+1,y+1+leny,a[d[i]].yl)-y;
        xr=lower_bound(x+1,x+1+lenx,a[d[i]].xr)-x;
        yr=lower_bound(y+1,y+1+leny,a[d[i]].yr)-y-1;
        vec[xl].push_back((node){yl,yr,1});
        vec[xr].push_back((node){yl,yr,-1});
    }
    for(int i=1;i<leny;i++) w[i]=y[i+1]-y[1];
    w[leny]=w[leny-1];
    for(int i=1;i<=lenx;i++)
    {
        for(node nd:vec[i]) update(1,1,leny,nd.l,nd.r,nd.k);
        ret+=1ll*(x[i+1]-x[i])*sum[1];
    }
    for(int i=1;i<=lenx;i++) vec[i].clear();
    return ret;
}
int tid;
int main()
{
    int l,r;
    freopen("dierti.in","r",stdin);
    freopen("dierti.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>tid>>n>>q;
    for(int i=1;i<=n;i++)
        cin>>a[i].xl>>a[i].yl>>a[i].xr>>a[i].yr;
    for(int i=1;i<=n;i++)
    {
        L[i]=i-1,R[i]=i+1;
        while(L[i]>0 && !hmat(a[i],a[L[i]])) L[i]--;
        while(R[i]<=n && !hmat(a[i],a[R[i]])) R[i]++;
        pr[i]=make_pair(R[i]-L[i]+1,i);
    }
    sort(pr+1,pr+1+n);
    while(q--)
    {
        cin>>l>>r;
        cnt=0;
        for(int i=n;i>=1 && pr[i].first>=r-l+3;i--)
            if(L[pr[i].second]<l && R[pr[i].second]>r && pr[i].second>=l && pr[i].second<=r) d[++cnt]=pr[i].second;
        cout<<get_ans()<<'\n';
    }
    return 0;
}
